home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / moden / adterm.int < prev    next >
Text File  |  1996-04-08  |  17KB  |  504 lines

  1. {Conditional defines that may affect this unit}
  2. {$I AWDEFINE.INC}
  3.  
  4. {Required options}
  5. {$I+,G+,X+,F+}
  6. {$C MOVEABLE,DEMANDLOAD,DISCARDABLE}
  7.  
  8. {*********************************************************}
  9. {*                    ADTERM.PAS 1.01                    *}
  10. {*        Copyright (c) TurboPower Software 1995         *}
  11. {*                 All rights reserved.                  *}
  12. {*********************************************************}
  13.  
  14. unit AdTerm;
  15.   {-Delphi terminal window component}
  16.  
  17. interface
  18.  
  19. uses
  20.   {-----RTL}
  21.   SysUtils,
  22.   Classes,
  23.   Messages,
  24.   WinTypes,
  25.   WinProcs,
  26.   Controls,
  27.   StdCtrls,
  28.   Forms,
  29.   DsgnIntf,
  30.   Graphics,
  31.   {-----APD}
  32.   OoMisc,
  33.   {$IFNDEF UseAPWDLL}
  34.   AwUser,
  35.   AwEmu,
  36.   AwTerm,
  37.   {$ENDIF}
  38.   AdExcept,
  39.   AdPort,
  40.   AdProtcl;
  41.  
  42. {$IFDEF UseAPWDLL}
  43. {$I AWEMU.PA0}        {ANSI emulator}
  44. {$I AWTERM.PA0}       {Terminal window control}
  45. {$ENDIF}
  46.  
  47. {Emulator constants from OOMISC}
  48. const
  49.   {Emulator commands}
  50.   eNone            = 0;       {No command, ignore this char}
  51.   eChar            = 1;       {No command, process the char}
  52.   eGotoXY          = 2;       {Absolute goto cursor position call}
  53.   eUp              = 3;       {Cursor up}
  54.   eDown            = 4;       {Cursor down}
  55.   eRight           = 5;       {Cursor right}
  56.   eLeft            = 6;       {Cursor left}
  57.   eClearBelow      = 7;       {Clear screen below cursor}
  58.   eClearAbove      = 8;       {Clear screen above cursor}
  59.   eClearScreen     = 9;       {Clear entire screen}
  60.   eClearEndofLine  = 10;      {Clear from cursor to end of line}
  61.   eClearStartOfLine= 11;      {Clear from cursor to the start of line}
  62.   eClearLine       = 12;      {Clear entire line that cursor is on}
  63.   eSetMode         = 13;      {Set video mode}
  64.   eSetBackground   = 14;      {Set background attribute}
  65.   eSetForeground   = 15;      {Set foreground attribute}
  66.   eSetAttribute    = 16;      {Set video attribute (foreground and background)}
  67.   eSaveCursorPos   = 17;      {Save cursor position}
  68.   eRestoreCursorPos= 18;      {Restore cursor position}
  69.   eDeviceStatusReport = 19;   {Report device status or cursor position}
  70.   eString          = 20;      {Pascal style string S[10]}
  71.   eError           = 255;     {indicates a parser error}
  72.  
  73.   {Extended attributes}
  74.   eattrBlink          = $01;
  75.   eattrInverse        = $02;
  76.   eattrIntense        = $04;
  77.   eattrInvisible      = $08;
  78.   eattrUnderline      = $10;
  79.  
  80.   {ANSI color constants}
  81.   emBlack       = 0;
  82.   emRed         = 1;
  83.   emGreen       = 2;
  84.   emYellow      = 3;
  85.   emBlue        = 4;
  86.   emMagenta     = 5;
  87.   emCyan        = 6;
  88.   emWhite       = 7;
  89.   emBlackBold   = 8;
  90.   emRedBold     = 9;
  91.   emGreenBold   = 10;
  92.   emYellowBold  = 11;
  93.   emBlueBold    = 12;
  94.   emMagentaBold = 13;
  95.   emCyanBold    = 14;
  96.   emWhiteBold   = 15;
  97.  
  98. type
  99.   {For setting auto-scrollbar behavior}
  100.   TAutoScroll = (asNone, asHorizontal, asVertical, asBoth);
  101.   TIntegralSize = (isNone, isWidth, isHeight, isBoth);
  102.  
  103.   {Emulator types}
  104.   TEmulatorType = (etNone, etANSI);
  105.  
  106.   {Capture mode}
  107.   TCaptureMode = (cmOff, cmOn, cmAppend);
  108.  
  109.   {Status event handler}
  110.   TTerminalStatusEvent = procedure(CP : TObject;
  111.                                    Row, Col : Byte;
  112.                                    BufRow, BufCol : Word) of object;
  113.  
  114. const
  115.   {Default emulator property values}
  116.   DefEmuData = nil;
  117.   DefEmulatorType = etAnsi;
  118.  
  119.   {Default terminal property values}
  120.   DefComPort     = nil;
  121.   DefEmulator    = nil;
  122.   DefControlStyles = [csClickEvents, csSetCaption, csFramed, csDoubleClicks];
  123.   DefWidth       = 200;
  124.   DefHeight      = 200;
  125.   DefTabStop     = True;
  126.   DefParentColor = False;
  127.   DefParentFont  = False;
  128.   DefStyle       = 0;
  129.   DefScrollBars  = ssNone;
  130.   DefAutoScroll  = asNone;
  131.   DefTermSave    = nil;
  132.   DefIntegralSize = isBoth;
  133.   DefScrollback  = False;
  134.   DefActive      = True;
  135.   DefColor       = clBlue;
  136.   DefFontColor   = clYellow;
  137.   DefRows        = 200;
  138.   DefColumns     = 80;
  139.   DefPageHeight  = 25;
  140.   DefDisplayRows = 15;
  141.   DefDisplayColumns = 40;
  142.   DefCapture     = cmOff;
  143.   DefCaptureFile = 'APD.CAP';
  144.   DefFontName    = 'Terminal';
  145.   DefWantTabs    = True;
  146.   DefBPlusTriggers = False;
  147.  
  148. type
  149.   {$I OOMISC.PA3}  {Contains types for OOTERM/ADTERM}
  150.  
  151.   {Emulator process char event}
  152.   TProcessCharEvent = procedure(CP : TObject;
  153.                                 C : Char;
  154.                                 var Command : TEmuCommand) of object;
  155.  
  156.   {The base emulator component}
  157.   TApdCustomEmulator = class(TComponent)
  158.   protected {private}
  159.     {.Z+}
  160.     FEmuInUse      : Bool;                                             {!!.01}
  161.     FEmuData       : Pointer;
  162.     FEmuProc       : TProcessCharProc;
  163.     FEmulatorType  : TEmulatorType;
  164.     FOnProcessChar : TProcessCharEvent;
  165.  
  166.   protected
  167.     procedure SetEmuData(NewEmu : Pointer);
  168.     procedure SetEmuProc(NewProc : TProcessCharProc);
  169.     procedure SetEmulatorType(const NewEmulatorType : TEmulatorType);
  170.     procedure Loaded; override;
  171.     procedure ProcessChar(C : Char; var Command : TEmuCommand); virtual;
  172.  
  173.   public
  174.     constructor Create(AOwner : TComponent); override;
  175.       {-Create a TApdEmulator component}
  176.     {.Z-}
  177.  
  178.     property EmulatorType : TEmulatorType
  179.       read FEmulatorType write SetEmulatorType default DefEmulatorType;
  180.     property OnProcessChar : TProcessCharEvent
  181.       read FOnProcessChar write FOnProcessChar;
  182.     property EmuData : Pointer
  183.       read FEmuData write SetEmuData;
  184.     property EmuProc : TProcessCharProc
  185.       read FEmuProc write SetEmuProc;
  186.     property EmuInUse : Bool                                           {!!.01}
  187.       read FEmuInUse write FEmuInUse;                                  {!!.01}
  188.   end;
  189.  
  190.   {The emulator component}
  191.   TApdEmulator = class(TApdCustomEmulator)
  192.   published
  193.     property EmulatorType;
  194.     property OnProcessChar;
  195.   end;
  196.  
  197.   {The base terminal window component}
  198.   TApdCustomTerminal = class(TWinControl)
  199.   protected {private}
  200.     {.Z+}
  201.     {Misc}
  202.     TermSave      : Pointer;
  203.     Created       : Boolean;
  204.     ActivePending : Boolean;
  205.     Force         : Boolean;
  206.     WasFullWidth  : Boolean;
  207.     PixelWidth    : Word;
  208.     InRecreate    : Boolean;
  209.  
  210.     {Property fields}
  211.     FComPort      : TApdCustomComPort;
  212.     FStyle        : LongInt;
  213.     FScrollBars   : TScrollStyle;
  214.     FAutoScroll   : TAutoScroll;
  215.     FIntegralSize : TIntegralSize;
  216.     FScrollBack   : Boolean;
  217.     FActive       : Boolean;
  218.     FEmulator     : TApdCustomEmulator;
  219.     FRows         : Word;
  220.     FColumns      : Word;
  221.     FPageHeight   : Word;
  222.     FDisplayRows  : Word;
  223.     FDisplayColumns : Word;
  224.     FCaptureFile  : String;
  225.     FCapture      : TCaptureMode;
  226.     FOnTerminalStatus : TTerminalStatusEvent;
  227.  
  228.     {Colors}
  229.     ColorMap      : TAnsiColorMap;
  230.  
  231.     {Private procedures}
  232.     procedure StuffDesignData;
  233.     procedure SetComPort(const NewComPort : TApdCustomComPort);
  234.     procedure SetEmulator(const NewEmulator : TApdCustomEmulator);
  235.     procedure SetName(const Value: TComponentName); override;
  236.     procedure WMSize(var Message: TWMSize); message WM_SIZE;
  237.  
  238.     {Font procedures}
  239.     procedure PassFont;
  240.     procedure CMFontChanged(var Message : TMessage); message CM_FONTCHANGED;
  241.  
  242.     {Color procedures}
  243.     function ColorIndex(const RGB : TColor) : Integer;
  244.     function CurrentColor(const Back : Boolean) : Integer;
  245.     procedure GetColorMap;
  246.     procedure SetColorMap;
  247.     procedure PassColors;
  248.     procedure CMColorChanged(var Message : TMessage); message CM_COLORCHANGED;
  249.  
  250.     {Open/close messages}
  251.     procedure PortOpen(var Message : TMessage); message APW_PORTOPEN;
  252.     procedure PortClose(var Message : TMessage); message APW_PORTCLOSE;
  253.  
  254.     {Terminal activation}
  255.     function StartTerminalPrim(UseExcept : Boolean) : Integer;
  256.     procedure StartTerminal; dynamic;
  257.     function StopTerminalPrim(UseExcept : Boolean) : Integer;
  258.     procedure StopTerminal; dynamic;
  259.  
  260.   protected
  261.     {Property methods}
  262.     procedure CreateWnd; override;
  263.     procedure CreateParams(var Params: TCreateParams); override;
  264.     procedure SetScrollBars(const NewScroll : TScrollStyle);
  265.     procedure SetAutoScroll(const NewScroll : TAutoScroll);
  266.     procedure SetIntegralSize(const NewInt : TIntegralSize);
  267.     procedure SetScrollback(const NewScroll : Boolean);
  268.     procedure SetActive(const NewActive : Boolean);
  269.     procedure SetRows(const NewRows : Word);
  270.     procedure SetColumns(const NewColumns : Word);
  271.     procedure SetPageHeight(const NewPageHeight : Word);
  272.     function GetDisplayRows : Word;
  273.     procedure SetDisplayRows(const NewRows : Word);
  274.     function GetDisplayColumns : Word;
  275.     procedure SetDisplayColumns(const NewColumns : Word);
  276.     function GetWantTabs : Boolean;
  277.     procedure SetWantTabs(const NewTabs : Boolean);
  278.     function GetHeight : Integer;
  279.     procedure SetHeight(const NewHeight : Integer);
  280.     function GetWidth : Integer;
  281.     procedure SetWidth(const NewWidth : Integer);
  282.     function GetCharWidth : Byte;
  283.     function GetCharHeight : Byte;
  284.     procedure SetCapture(const NewCapture : TCaptureMode);
  285.     procedure SetCaptureFile(const NewFile : String);
  286.  
  287.     {Event methods}
  288.     procedure TerminalStatus(Row, Col : Byte; BufRow, BufCol : Word); virtual;
  289.  
  290.     {Message methods}
  291.     procedure apwTermStatus(var Message : TMessage); message APW_TERMSTATUS;
  292.  
  293.     {Other protected methods}
  294.     procedure PassBuffer;
  295.     procedure GetTermState;
  296.     procedure SetTermState;
  297.     procedure RecreateWnd;
  298.     procedure WndProc(var Message: TMessage); override;
  299.     procedure Notification(AComponent : TComponent;
  300.                            Operation: TOperation); override;
  301.     procedure Loaded; override;
  302.  
  303.    public
  304.     {Creation/destruction}
  305.     constructor Create(AOwner : TComponent); override;
  306.       {-Create a TApdTerminal component}
  307.     destructor Destroy; override;
  308.       {-Destroy a TApdTerminal component}
  309.     {.Z-}
  310.  
  311.     {Other public properties}
  312.     procedure ClearWindow;
  313.       {-Clear the visible window by performing a page-down operation}
  314.     procedure ClearBuffer;
  315.       {-Clear the entire buffer}
  316.     procedure StuffChar(const C : Char);
  317.       {-Add the character C to the current location in the terminal window}
  318.     procedure StuffString(const S : String);
  319.       {-Add the string S to the current location in the terminal window}
  320.     procedure ForcePaint;
  321.       {-Update the terminal display, required after StuffChar or StuffString}
  322.     procedure CopyToClipboard;
  323.       {-Copy the marked block to the clipboard}
  324.     procedure SetColors(const FC, BC : Byte);
  325.       {-Set the foreground and background colors for new data}
  326.  
  327.     property CharWidth : Byte
  328.       read GetCharWidth;
  329.     property CharHeight : Byte
  330.       read GetCharHeight;
  331.  
  332.   protected {published}
  333.     property ComPort : TApdCustomComPort
  334.       read FComPort write SetComPort;
  335.     property Active : Boolean
  336.       read FActive write SetActive default DefActive;
  337.     property ScrollBars : TScrollStyle
  338.       read FScrollBars write SetScrollBars default DefScrollBars;
  339.     property AutoScroll : TAutoScroll
  340.       read FAutoScroll write SetAutoScroll default DefAutoScroll;
  341.     property IntegralSize : TIntegralSize
  342.       read FIntegralSize write SetIntegralSize default DefIntegralSize;
  343.     property Scrollback : Boolean
  344.       read FScrollback write SetScrollback default DefScrollback;
  345.     property Emulator : TApdCustomEmulator
  346.       read FEmulator write SetEmulator;
  347.  
  348.     property Rows : Word
  349.       read FRows write SetRows default DefRows;
  350.     property Columns : Word
  351.       read FColumns write SetColumns default DefColumns;
  352.     property PageHeight : Word
  353.       read FPageHeight write SetPageHeight default DefPageHeight;
  354.     property DisplayRows : Word
  355.       read GetDisplayRows write SetDisplayRows default DefDisplayRows;
  356.     property DisplayColumns : Word
  357.       read GetDisplayColumns write SetDisplayColumns default DefDisplayColumns;
  358.     property CaptureFile : String
  359.       read FCaptureFile write SetCaptureFile;
  360.     property Capture : TCaptureMode
  361.       read FCapture write SetCapture default DefCapture;
  362.     property WantTabs : Boolean
  363.       read GetWantTabs write SetWantTabs default DefWantTabs;
  364.  
  365.     {.Z+}
  366.     {Override these so we can get to SetWidth/SetHeight}
  367.     property Height : Integer
  368.       read GetHeight write SetHeight;
  369.     property Width : Integer
  370.       read GetWidth write SetWidth;
  371.     {.Z-}
  372.  
  373.     {Events}
  374.     property OnTerminalStatus : TTerminalStatusEvent
  375.       read FOnTerminalStatus write FOnTerminalStatus;
  376.   end;
  377.  
  378.   {The terminal window component}
  379.   TApdTerminal = class(TApdCustomTerminal)
  380.   published
  381.     {Publish the terminal window properties}
  382.     property ComPort;
  383.     property Active;
  384.     property ScrollBars;
  385.     property AutoScroll;
  386.     property IntegralSize;
  387.     property Scrollback;
  388.     property Emulator;
  389.     property Rows;
  390.     property Columns;
  391.     property PageHeight;
  392.     property DisplayRows;
  393.     property DisplayColumns;
  394.     property CaptureFile;
  395.     property Capture;
  396.     property WantTabs;
  397.     property Height;
  398.     property Width;
  399.     property OnTerminalStatus;
  400.  
  401.     {Published inherited properties}
  402.     property Align;
  403.     property Color default DefColor;
  404.     property Ctl3d;
  405.     property Cursor;
  406.     property Enabled;
  407.     property Font;
  408.     property ParentColor;
  409.     property ParentCtl3D;
  410.     property ParentFont;
  411.     property Visible;
  412.  
  413.     {Published inherited events}
  414.     property OnClick;
  415.     property OnDblClick;
  416.     property OnExit;
  417.     property OnKeyDown;
  418.     property OnKeyPress;
  419.     property OnKeyUp;
  420.     property OnMouseDown;
  421.     property OnMouseMove;
  422.     property OnMouseUp;
  423.   end;
  424.  
  425.   {B+ Terminal}
  426.   TApdCustomBPTerminal = class(TApdCustomTerminal)                     {!!.01}
  427.   protected {private}
  428.     {.Z+}
  429.     TimerIndex    : Word;             {B+ timer trigger handle}
  430.     EnqTrig       : Word;             {ENQ trigger handle}
  431.     DLETrig       : Word;             {DLE trigger handle}
  432.     EscITrig      : Word;             {<ESC>I trigger handle}
  433.     Started       : Boolean;          {True if B+ started}
  434.     ProcessingDLE : Boolean;          {True when processing a DLE sequence}
  435.     Protocol      : TApdProtocol;     {B+ protocol component}
  436.     FBPlusTriggers: Boolean;          {Sets triggers on/off}
  437.     FOnBPlusStart : TNotifyEvent;     {Event handler for B+ starts}
  438.  
  439.   protected
  440.     procedure SetBPlusTriggers(const OnOff : Boolean);
  441.     procedure CreateWnd; override;
  442.     procedure apwTriggerTimer(var Msg : TMessage); message APW_TRIGGERTIMER;
  443.     procedure apwTriggerLength(var Msg : TMessage); message APW_TRIGGERAVAIL;
  444.     procedure apwTriggerData(var Msg : TMessage); message APW_TRIGGERDATA;
  445.     procedure apwBPlusStart(var Msg : TMessage); message APW_TERMBPLUSSTART;
  446.     function FoundDLE : Boolean;
  447.     procedure Notification(AComponent : TComponent;
  448.                            Operation: TOperation); override;
  449.  
  450.  
  451.   public
  452.     constructor Create(AOwner : TComponent); override;
  453.       {-Create a TApdBPTerminal}
  454.     {.Z-}
  455.  
  456.     property OnBPlusStart : TNotifyEvent
  457.       read FOnBPlusStart write FOnBPlusStart;
  458.     property BPlusTriggers : Boolean
  459.       read FBPlusTriggers write SetBPlusTriggers default DefBPlusTriggers;
  460.   end;
  461.  
  462.   {B+ Terminal}
  463.   TApdBPTerminal = class(TApdCustomBPTerminal)
  464.   published
  465.     property ComPort;
  466.     property Active;
  467.     property ScrollBars;
  468.     property AutoScroll;
  469.     property IntegralSize;
  470.     property Scrollback;
  471.     property Emulator;
  472.     property Rows;
  473.     property Columns;
  474.     property PageHeight;
  475.     property DisplayRows;
  476.     property DisplayColumns;
  477.     property CaptureFile;
  478.     property Capture;
  479.     property Align;
  480.     property Color default DefColor;
  481.     property Ctl3d;
  482.     property Enabled;
  483.     property Font;
  484.     property ParentColor;
  485.     property ParentCtl3D;
  486.     property ParentFont;
  487.     property Visible;
  488.     property WantTabs;                                                 {!!.01}
  489.     property OnClick;
  490.     property OnDblClick;
  491.     property OnExit;
  492.     property OnKeyDown;
  493.     property OnKeyPress;
  494.     property OnKeyUp;
  495.     property OnMouseDown;
  496.     property OnMouseMove;
  497.     property OnMouseUp;
  498.     property OnBPlusStart;
  499.     property OnTerminalStatus;                                         {!!.01}
  500.   end;
  501.  
  502.   procedure Register;
  503.  
  504.